home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / src / bin / crayola / common / crayQuad.c < prev    next >
C/C++ Source or Header  |  1993-01-12  |  5KB  |  173 lines

  1. #include "geom.h"
  2. #include "quadP.h"
  3. #include "crayolaP.h"
  4.  
  5. static char msg[] = "crayQuad.c";
  6.  
  7. void *cray_quad_HasVColor(int sel, Geom *geom, va_list args);
  8.  
  9. void *cray_quad_UseVColor(int sel, Geom *geom, va_list args);
  10.  
  11. void *cray_quad_EliminateColor(int sel, Geom *geom, va_list args);
  12.  
  13. void *cray_quad_SetColorAll(int sel, Geom *geom, va_list args);
  14. void *cray_quad_SetColorAt(int sel, Geom *geom, va_list args);
  15. void *cray_quad_SetColorAtV(int sel, Geom *geom, va_list args);
  16. void *cray_quad_SetColorAtF(int sel, Geom *geom, va_list args);
  17.  
  18. void *cray_quad_GetColorAt(int sel, Geom *geom, va_list args);
  19. void *cray_quad_GetColorAtV(int sel, Geom *geom, va_list args);
  20. void *cray_quad_GetColorAtF(int sel, Geom *geom, va_list args);
  21.  
  22. #define MAX_METHODS 12
  23.  
  24. static craySpecFunc methods[] = {
  25.   "crayHasColor", cray_quad_HasVColor,
  26.   "crayHasVColor", cray_quad_HasVColor,
  27.   
  28.   "crayCanUseVColor", crayTrue,
  29.   
  30.   "crayUseVColor", cray_quad_UseVColor,
  31.   
  32.   "crayEliminateColor", cray_quad_EliminateColor,
  33.   
  34.   "craySetColorAll", cray_quad_SetColorAll,
  35.   "craySetColorAt", cray_quad_SetColorAt,
  36.   "craySetColorAtV", cray_quad_SetColorAtV,
  37.   "craySetColorAtF", cray_quad_SetColorAtF,
  38.   
  39.   "crayGetColorAt", cray_quad_GetColorAt,
  40.   "crayGetColorAtV", cray_quad_GetColorAtV,
  41.   "crayGetColorAtF", cray_quad_GetColorAtF
  42.   };
  43.  
  44. cray_quad_init() {
  45.   crayInitSpec(methods, MAX_METHODS, GeomClassLookup("quad"));
  46.   return 0;
  47. }
  48.  
  49. void *cray_quad_HasVColor(int sel, Geom *geom, va_list args) {
  50.   Quad *q = (Quad *)geom;
  51.   return (void *)(q->flag & QUAD_C);
  52. }
  53.  
  54. void *cray_quad_UseVColor(int sel, Geom *geom, va_list args) {
  55.   Quad *q = (Quad *)geom;
  56.   ColorA *color;
  57.   int i;
  58.  
  59.   if (crayHasVColor(geom, NULL)) return 0;
  60.   color = va_arg(args, ColorA *);
  61.   q->c = OOGLNewNE(QuadC, q->maxquad, msg);
  62.   for (i = 0; i < q->maxquad; i++) 
  63.     q->c[i][0] = q->c[i][1] = q->c[i][2] = q->c[i][3] = *color;
  64.   q->flag |= QUAD_C;
  65.   return (void *)geom;
  66. }
  67.  
  68. void *cray_quad_EliminateColor(int sel, Geom *geom, va_list args) {
  69.   Quad *q = (Quad *)geom;
  70.  
  71.   if (!crayHasVColor(geom, NULL)) return 0;
  72.   OOGLFree(q->c);
  73.   q->c = NULL;
  74.   q->flag &= ~QUAD_C;
  75.   return (void *)geom;
  76. }
  77.  
  78. void *cray_quad_SetColorAll(int sel, Geom *geom, va_list args) {
  79.   int i;
  80.   Quad *q = (Quad *)geom;
  81.   ColorA *color = va_arg(args, ColorA *);
  82.   if (!crayHasColor(geom, NULL)) return NULL;
  83.   for (i = 0; i < q->maxquad; i++) {
  84.     q->c[i][0] = *color;
  85.     q->c[i][1] = *color;
  86.     q->c[i][2] = *color;
  87.     q->c[i][3] = *color;
  88.   }
  89.   return (void *)geom;
  90. }
  91.  
  92. void *cray_quad_SetColorAt(int sel, Geom *geom, va_list args) {
  93.   ColorA *color;
  94.   int vindex, findex;
  95.   color = va_arg(args, ColorA *);
  96.   vindex = va_arg(args, int);
  97.   findex = va_arg(args, int);
  98.   if (vindex != -1) 
  99.     return (void *)craySetColorAtV(geom, color, vindex, NULL, NULL);
  100.   return (void *)craySetColorAtF(geom, color, findex, NULL);
  101. }
  102.  
  103. void *cray_quad_SetColorAtV(int sel, Geom *geom, va_list args) {
  104.   Quad *q = (Quad *)geom;
  105.   ColorA *color;
  106.   int index;
  107.   color = va_arg(args, ColorA *);
  108.   index = va_arg(args, int);
  109.   if (index == -1 || !crayHasVColor(geom, NULL)) return 0;
  110.   q->c[0][index] = *color;
  111.   return (void *)geom;
  112. }
  113.  
  114.  
  115. /*
  116.  * Note - this is somewhat strangely written. Quad colors may be set
  117.  * (and gotten) by vertex or by face, although they are always stored 
  118.  * by vertex.
  119.  */
  120. void *cray_quad_SetColorAtF(int sel, Geom *geom, va_list args) {
  121.   Quad *q = (Quad *)geom;
  122.   ColorA *color;
  123.   int index;
  124.   color = va_arg(args, ColorA *);
  125.   index = va_arg(args, int);
  126.   if (index == -1 || !crayHasVColor(geom, NULL)) return 0;
  127.   q->c[index][0] = q->c[index][1] = q->c[index][2] = 
  128.     q->c[index][3] = *color;
  129.   return (void *)geom;
  130. }
  131.  
  132.  
  133. void *cray_quad_GetColorAt(int sel, Geom *geom, va_list args) {
  134.   Quad *q = (Quad *)geom;
  135.   ColorA *color;
  136.   int vindex, findex;
  137.  
  138.   color = va_arg(args, ColorA *);
  139.   vindex = va_arg(args, int);
  140.   findex = va_arg(args, int);
  141.   if (!crayHasVColor(geom, NULL)) return 0;
  142.   if (vindex != -1) 
  143.     return (void *)crayGetColorAtV(geom, color, vindex, NULL, NULL);
  144.   return (void *)crayGetColorAtF(geom, color, findex, NULL);
  145. }
  146.  
  147. void *cray_quad_GetColorAtV(int sel, Geom *geom, va_list args) {
  148.   Quad *q = (Quad *)geom;
  149.   ColorA *color;
  150.   int index;
  151.  
  152.   color = va_arg(args, ColorA *);
  153.   index = va_arg(args, int);
  154.   if (!crayHasVColor(geom, NULL) || index == -1) return 0;
  155.   *color = q->c[0][index];
  156.   return (void *)geom;
  157. }
  158.  
  159. void *cray_quad_GetColorAtF(int sel, Geom *geom, va_list args) {
  160.   Quad *q = (Quad *)geom;
  161.   ColorA *color;
  162.   int index;
  163.  
  164.   color = va_arg(args, ColorA *);
  165.   index = va_arg(args, int);
  166.   if (!crayHasVColor(geom, NULL) || index == -1) return 0;
  167.   *color = q->c[index][0];
  168.   return (void *)geom;
  169. }
  170.  
  171.  
  172.  
  173.